package www.study.com;

public class code48 {
    public static void main(String[] args) {

    }

    class Solution {

        //有问题
        public void rotate(int[][] matrix) {
            //先水平
            int n = matrix.length;
            for(int i = 0 ; i < n ; i++){
                for(int j = 0 ; j < n / 2 ; j++){
                    int tmp = matrix[i][n - j - 1];
                    matrix[i][n - j - 1] = matrix[i][j];
                    matrix[i][j] = tmp;
                }
            }
            for(int i = 0 ; i < n ; i++){
                for(int j = n - 1 ; j > n - i ; j--){
                    int tmp = matrix[i][j];
                    matrix[i][j] = matrix[j][i];
                    matrix[j][i] = tmp;
                }
            }
            //后沿右上角-左下角轴旋转
        }

        // 方法一：复杂度过高
        // public void rotate(int[][] matrix) {
        //     int len = matrix.length;
        //     for(int i = 0 ; i < matrix.length / 2 ; i++){
        //         int j = i;
        //         for(int k = 0 ; k < len - 1 ; k++){
        //             int i2 = i; //s
        //             int j2 = j + k; //s
        //             int[][] markPos = new int[4][2]; //markPos[k][0]：i，markPos[k][1]：j
        //             markPos[0][0] = i2;markPos[0][1] = j2;
        //             markPos[1][0] = i + k;markPos[1][1] = j + len - 1;
        //             markPos[2][0] = i + len - 1;markPos[2][1] = j + len - 1 - k;
        //             markPos[3][0] = i + len - 1 - k;markPos[3][1] = j;
        //             int repVal = matrix[markPos[3][0]][markPos[3][1]]; //最后一个位置的值
        //             for(int pos = 0 ; pos < 4 ; pos++){
        //                 //System.out.print("repVal :" + repVal);
        //                 int nowi = markPos[pos][0];
        //                 int nowj = markPos[pos][1];
        //                 int cur = matrix[nowi][nowj];
        //                 matrix[nowi][nowj] = repVal;
        //                 repVal = cur;
        //             }
        //             //matrix[i2][j2] = repVal;
        //             //print(markPos);
        //         }
        //         len-=2; //此处要注意，范围减去2，错误：len--
        //     }
        //     print(matrix);

        // }
        public void print(int[][] matrix){
            System.out.println("printing...");
            StringBuilder sbu = new StringBuilder();
            for(int i = 0 ; i < matrix.length ; i++){
                for(int j = 0 ; j < matrix[0].length ; j++){
                    sbu.append(matrix[i][j] + " ");
                }
                sbu.append("\n");
            }
            System.out.println(sbu.toString());
        }
    }
}
